#pragma once
#include "Connection.hpp"
#include "IO_Connection.hpp" //在receive()里做_server->insert_connection


class listen_connection : public connection
{
protected:
    virtual void exception_handler() override {}; //定义为空方法 -- 用不到也必须要实现, 否则listen_connection无法实例化

public:
    listen_connection(uint16_t port)
        :_port(port)
    {
        //设置protected的父类成员
        _sockfd_ptr->create_listen_socket(_port);
        set_no_block(_sockfd_ptr->get_socket_fd());//设置listen_sockfd为非阻塞
        _events = EPOLLIN | EPOLLET; //读 + ET模式
    }

    //accept
    virtual void receive() override; //因为内部要使用reactor_server* _server的成员方法, 且
    //class reactor_server和class listen_connection被分在了两个.hpp文件里. [万万不可在两个头文件里互相包含对方的头文件!!!]
    //但两个类其中都有使用对方的类指针和类成员函数, 导致循环引用.
    //仅仅使用了指针可以通过前置声明解决, 但使用成员函数就需要头源分离解决了, 在.cpp文件里包含对方的源文件


    virtual void send() override {}; //定义为空方法 -- 用不到也必须要实现, 否则listen_connection无法实例化


protected:
    uint16_t _port;

};